10 REM LABEL BASE 64/128 20 REM BY BOB KODADEK 30 : 40 PS=0:LL=3:Q=250:C=40:MO=64:ML=828:YR=782:PRINT CHR$(142) 50 IF PEEK(40960)=0 THEN MO=128:ML=4864:POKE828,183:IF PEEK(215) THEN C=80 60 SP$=CHR$(32):M$=CHR$(44):IF MO=128 THEN YR=8:Q=350 70 IF C=80 THEN POKE53265,PEEK(53265) AND 239:POKE 53296,1:REM FAST MODE 80 B$=CHR$(13)+CHR$(18):O$=CHR$(146):FOR I=0 TO 6:READ FD$(I),L%(I):NEXT 90 FOR I=3 TO C:L$=L$+CHR$(163):NEXT:FORI=0 TO 39:E$=E$+SP$:NEXT 100 FOR I=0 TO 89:READ BY:POKE ML+I,BY:CK=CK+BY:NEXT:IF PS THEN PRINT CHR$(14) 110 IF CK<>14598 THEN PRINT"DATA ERROR":END 120 DIM R$(Q,7),K(Q):FORI=1 TO Q:K(I)=I:NEXT 130 : 140 REM - MENU 1 - 150 CLOSE1:CLOSE5:CLOSE15:GOSUB300:PRINT 160 PRINT B$ SPC(5)"F1" O$" - LOAD FILE" 170 PRINT B$ SPC(5)"F3" O$" - SAVE FILE" 180 PRINT B$ SPC(5)"F5" O$" - SELECT RECORDS" 190 PRINT B$ SPC(5)"F7" O$" - DIRECTORY " 200 PRINT B$ SPC(5)"F2" O$" - ENTER DATA" 210 PRINT B$ SPC(5)"F4" O$" - ALPHABETIZE" 220 PRINT B$ SPC(5)"F6" O$" - PRINT MENU" 230 GOSUB310:KP=ASC(A$)-132:IF KP<1 OR KP>7 THEN 230 240 ON KP GOSUB430,560,650,1330,980,880,1590 250 GOTO150 260 : 270 X=20:Y=0:GOSUB280:PRINT E$:RETURN 280 IF MO=64 THEN POKE781,X:POKE YR,Y:POKE783,0:SYS65520:RETURN 290 POKE7,X:POKE YR,Y:POKE5,0:SYS65520:RETURN 300 PRINT CHR$(147)" LABEL BASE" MO"- FILE: "FS$:PRINT SPC(1) L$:RETURN 310 A$="":GET A$:IF A$="" THEN 310 320 RETURN 330 F$="":INPUT F$:LE=LEN(F$):RETURN 340 INPUT#15,EN$,EM$,ET$,ES$:EN=VAL(EN$):RETURN 350 GOSUB270:X=19:Y=0:GOSUB280 360 CLOSE 5:CLOSE 15 370 PRINT B$ "DRIVE STATUS:" O$+SP$+EN$+M$+EM$+M$+ET$+M$+ES$ 380 PRINT:PRINT"PRESS RETURN" 390 GOSUB310:IFA$<>CHR$(13)THEN 390 400 RETURN 410 : 420 REM - LOAD FILE - 430 PRINT:PRINT"LOAD WHICH FILE";:GOSUB330 440 IF LE<1 THEN RETURN 450 IF F$="NEW" THEN NR=0:RN=0:FS$="":RETURN 460 OPEN 15,8,15:OPEN 5,8,5,"LB."+F$+",S,R" 470 GOSUB340:IF EN<>0 THEN 350 480 PRINT:PRINT"READING " F$;:RN=1 490 FOR I=RN TO Q:FOR N=0 TO 6:INPUT#5,R$(I,N) 500 IF ST=64 THEN520 510 NEXT N:NEXT I 520 NR=I:FOR I=1 TO Q:K(I)=I:NEXT 530 FS$=F$:GOTO350 540 : 550 REM - SAVE FILE - 560 PRINT:PRINT"SAVE TO FILENAME";:GOSUB330 570 IF LE<1 THEN RETURN 580 OPEN 15,8,15:PRINT#15,"S0:LB."+F$ 590 OPEN 5,8,5,"LB."+F$+",S,W":GOSUB340 600 PRINT:PRINT"WRITING " F$;:IF EN<>0 THEN350 610 FOR I=1 TO NR:FOR N=0 TO 6:IF R$(K(I),N)="" THEN R$(K(I),N)=SP$ 620 PRINT#5,R$(K(I),N):NEXT N:NEXT I:GOTO350 630 : 640 REM - SELECT RECORDS - 650 GOSUB1080:GOSUB310 660 IF A$=CHR$(13) THEN RETURN 670 IF A$="F"THEN IF NR THEN RN=1 680 IF A$="L"THEN RN=NR 690 IF A$="R"AND NR THEN GOSUB1500:GOTO650 700 IF A$="P"AND RN>1 THEN RN=RN-1 710 IF A$="N"AND RNNRTHENRN=RN-1 740 IF A$="A"THEN GOSUB980 750 IF A$="E"AND NR THEN GOSUB1160 760 IF A$=CHR$(16) THEN GOSUB1690 770 IF A$="?"THEN GOSUB790 780 CLOSE4:GOTO650 790 GOSUB300:X=5:Y=8:GOSUB280:PRINT"HELP MENU":PRINT 800 PRINT SPC(8)"F - FIRST RECORD":PRINT SPC(8)"N - NEXT RECORD" 810 PRINT SPC(8)"P - PREVIOUS RECORD":PRINT SPC(8)"L - LAST RECORD" 820 PRINT SPC(8)"K - KEY FIELD MATCH":PRINT SPC(8)"A - ADD RECORDS" 830 PRINT SPC(8)"D - DELETE RECORD":PRINT SPC(8)"R - REPLACE RECORD" 840 PRINT SPC(8)"E - EDIT CURRENT RECORD" 850 GOSUB380:RETURN 860 : 870 REM - SORT RECORDS 880 Y=NR:PRINT:PRINT"SORTING"; 890 Y=INT(Y/2):IFY=0THEN RETURN 900 J=1:K=NR-Y 910 I=J 920 L=I+Y:PRINT".";:IF R$(K(I),0)<=R$(K(L),0) THEN 940 930 T=K(I):K(I)=K(L):K(L)=T:I=I-Y:IF I>0 THEN 920 940 J=J+1:IF J>K THEN 890 950 GOTO910 960 : 970 REM - ENTRY 980 T=NR+1:IF T>Q THEN RETURN 990 RN=T:NR=T:FLAG=1:FOR I=0 TO 6:R$(RN,I)="":NEXT 1000 GOSUB1080:FOR I=0 TO 6:X=8+I:Y=11:GOSUB280:POKE YR,L%(I) 1010 SYS ML:C1=PEEK(YR):IF C1=0 THEN R$(RN,I)=SP$:GOTO1030 1020 FOR S=1 TO C1:R$(RN,I)=R$(RN,I)+CHR$(PEEK(255+S)):NEXT S 1030 NEXT I:K(RN)=RN:GOSUB270:Y=6:GOSUB280:PRINT"PRESS SPACE BAR FOR ANOTHER" 1040 GOSUB310:IFA$=SP$ THEN 980 1050 FLAG=0:RETURN 1060 : 1070 REM - DISPLAY RECORD - 1080 GOSUB300:X=4:Y=5:GOSUB280:PRINT"RECORD #"RN"OF"NR 1090 X=8:Y=0:GOSUB280:FOR I=0 TO 6:LD=36-(24-L%(I)) 1100 PRINT SPC(8-LEN(FD$(I))) FD$(I)" < "R$(K(RN),I) TAB(LD)">":NEXT 1110 IF FLAG THEN RETURN 1120 IF FLAG=0 THEN X=18:Y=8:GOSUB280:PRINT "(PRESS CTRL-P TO PRINT)" 1130 X=20:Y=1:GOSUB280:PRINT"SELECT - F, N, P, L, K, A, D, R, E, ?" 1140 RETURN 1150 : 1160 REM - EDIT RECORD - 1170 GOSUB300:X=4:Y=5:GOSUB280:PRINT"RECORD #"RN"OF"NR 1180 X=8:Y=0:GOSUB280:FOR I=0 TO 6 1190 IF R$(K(RN),I)="" OR R$(K(RN),I)=SP$ THEN R$(K(RN),I)="*" 1200 PRINT SPC(8-LEN(FD$(I))) FD$(I)": "R$(K(RN),I) 1210 PRINT CHR$(145) TAB(10);:OPEN1,0:INPUT#1,R$(K(RN),I) 1220 IF R$(K(RN),I)="*" THEN R$(K(RN),I)="" 1230 PRINT:CLOSE1:NEXT:RETURN 1240 : 1250 REM - DELETE RECORD - 1260 GOSUB270:Y=5:GOSUB280:PRINT"DELETE THIS RECORD? (Y OR N)" 1270 GOSUB310:IF A$<>"Y" THEN RETURN 1280 FOR N=0 TO 6:R$(K(RN),N)=R$(NR,N):R$(NR,N)="":NEXT 1290 FOR I=1 TO NR:IFK(I)=NR THEN K(I)=K(NR):K(NR)=0:NR=NR-1:RETURN 1300 NEXT:RETURN 1310 : 1320 REM - READ DIRECTORY 1330 GOSUB300:PRINT:PRINT 1340 OPEN15,8,15:OPEN1,8,0,"$0:LB.*":GOSUB340:IFEN<>0THEN350 1350 N$=CHR$(0):GET#1,A$,A$ 1360 GET#1,A$,A$:IF A$=""THEN 1400 1370 GET#1,A$,C$:PRINT ASC(A$+N$)+ASC(C$+N$)*256; 1380 GET#1,A$:IFA$=""THEN PRINT:GOTO1360 1390 PRINTA$;:GOTO1380 1400 GOTO360 1410 : 1420 REM - KEY STRING - 1430 GOSUB270:Y=6:GOSUB280 1440 PRINT"ENTER KEY -";:INPUTK$ 1450 FOR I=1 TO NR 1460 IF K$=LEFT$(R$(K(I),0),LEN(K$)) THEN RN=I:RETURN 1470 NEXT:RETURN 1480 : 1490 REM - REPLACE RECORD 1500 GOSUB270:Y=5:GOSUB280:PRINT"REPLACE THIS RECORD? (Y OR N)" 1510 GOSUB310:IF A$<>"Y" THEN RETURN 1520 FOR I=0 TO 6:R$(K(RN),I)="":NEXT 1530 GOSUB1080:FOR I=0 TO 6:X=8+I:Y=11:GOSUB280:POKE YR,L%(I) 1540 SYSML:C1=PEEK(YR):IF C1=0 THEN R$(K(RN),I)=SP$:GOTO1560 1550 FOR S=1 TO C1:R$(K(RN),I)=R$(K(RN),I)+CHR$(PEEK(255+S)):NEXT S 1560 NEXT I:RETURN 1570 : 1580 REM - PRINT MENU - 1590 GOSUB300:PRINT:PRINT 1600 PRINT B$ SPC(5)"F1" O$" - PRINT CURRENT RECORD" 1610 PRINT B$ SPC(5)"F3" O$" - PRINT ALL RECORDS" 1620 PRINT B$ SPC(5)"F5" O$" - PRINT PHONE LIST" 1630 GOSUB310:IF A$=CHR$(13) THEN RETURN 1640 KP=ASC(A$)-132:IF KP<1 OR KP>3 THEN 1630 1650 ON KP GOSUB1690,1800,1850 1660 CLOSE4:GOTO1590 1670 : 1680 REM - PRINT RECORD - 1690 CN=1:OPEN4,4,PS:CLOSE4:SS=ST:IF SS THEN RETURN 1700 PRINT:PRINT"HOW MANY LABELS? 1";:INPUT"[157][157][157]";CN 1710 OPEN4,4,PS:IF CN <1 THEN RETURN 1720 FOR I=1 TO CN 1730 PRINT#4,R$(K(RN),1) CHR$(32) R$(K(RN),0) 1740 PRINT#4,R$(K(RN),2) 1750 PRINT#4,R$(K(RN),3)","CHR$(32) R$(K(RN),4) CHR$(32); 1760 PRINT#4,R$(K(RN),5) 1770 FOR S=1 TO LL:PRINT#4:NEXT S:NEXT I:RETURN 1780 : 1790 REM - PRINT ALL RECORDS - 1800 T=RN:RN=1:GOSUB1690:IF CN<1 OR SS THEN RETURN 1810 RN=RN+1:GOSUB1720:IF RN